package com.atguigu.param;

import com.atguigu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @author Administrator
 * @版本： V5.1.0
 * @版权： Copyright @ 2025 广东广昱信息科技有限公司版权所有
 * @作者： 广东广昱信息科技有限公司
 * @日期： 2025-07-04 9:06
 */
@Controller
@RequestMapping("/param")
public class ParamController {

    //直接接受
    // /param/data?name=root&age=18
    //形参列表，填写对应名称的参数即可！请求参数名 = 形参参数名即可
    //1.名称相同 2.可以不传递 不报错
    @GetMapping("data")
    @ResponseBody
    public String data(String name,Integer age){
        System.out.println("name = "+name+", age = "+age);
        return "name = "+name+", age = "+age;
    }

    //注解指定
    //指定任意的请求参数名 要求必须传递 要爱不必须传递 给予一个默认值
   // /param/data1?account=root&page=1
    //acount必须传递 page可以不传递，如果不传递默认值就是1

    /**
     * @RequestParam->形参列表  指定请求参数名 或者是否必须传递或者 非必须传递设置默认值
     *                        用法 @RequestParam(value = "指定请求参数名,如果形参名和请求参数名一致，可以省略",
     *                        required = false,前端是否必须传递此参数，默认是必须，不传400异常!，
     *                        defaultValue = "1" 当非必须传递false,可以设置默认值)
     * @param username
     * @param age
     * @return
     */
    @RequestMapping("data1")
    public String data1(@RequestParam("account") String username,
                        @RequestParam(value = "page",defaultValue = "1",required = false) Integer page){
            System.out.println("username = "+username+", page = "+page);
            return "username = "+username+", page = "+page;
    }

    //特殊值
    //一名多汁 key=1&key=2 直接使用集合接值即可

    //param/data2?hbs=吃&hbs=玩&hbs=学习
    //不加注解@RequestParam 将hbs对应的一个字符串直接赋值给集合！类型异常！
    //加了注解，就会将集合 add加入对应的字符串

    @GetMapping("data2")
    @ResponseBody
    public String data2(@RequestParam  List<String> hbs){
        System.out.println("hbs = "+hbs);
        return "ok";
    }


    //使用实体对象接值  用户注册(用户的信息) -》  对应的实体类      -》      插入到数据库表

    //param/data3?name=二狗子&age=18准备一个对应属性和get|set方法的实体类即可!
    @GetMapping("data3")
    @ResponseBody
    public String data3(User user){
        System.out.println("user = "+user);
        return user.toString();
    }
}
